package main

import (
	"flag"
	"fmt"
	"os"
	"time"
	"wxReadShare/logger"
	"wxReadShare/pie"
)

func main() {
	// 加载配置文件
	Init()
	// 加载日志
	// 初始化日志配置
	logger.Init(logger.LogConfig{
		Level:      "debug",
		Filename:   AppConfig.LogPath,
		MaxSize:    100, // MB
		MaxBackups: 3,
		MaxAge:     7, // days
		Compress:   true,
		Console:    false,
		Caller:     true,
	})
	// 使用默认logger
	logg := logger.Default()
	logg.Info("Application starting")

	// 初始化缓存
	cacheDir := AppConfig.Pie.CacheDir
	ttl := time.Duration(AppConfig.Pie.TTL) * 24 * time.Hour
	cache, err := pie.NewFileCache(cacheDir, ttl) // TTL设置为24小时 * 30 一个月
	if err != nil {
		panic(err)
	}

	var url string
	var indexId string
	// 定义布尔类型的命令行标志，默认值 false
	tocPtr := flag.Bool("toc", false, "只显示目录 与 -url 一起使用")
	flag.StringVar(&url, "url", "", "目标URL")
	flag.StringVar(&indexId, "index", "", "显示目录列表")
	flag.Parse()

	if url == "" {
		if indexId == "" {
			fmt.Println("错误: --url 参数 获取书籍信息")
			fmt.Println("错误: --index 参数 获取目录列表")
			flag.Usage()
			os.Exit(1)
		}
	}

	if url == "" {
		if indexId != "" {
			// 执行获取目录列表
			indexKey := indexId + "_toc.json"

			if !cache.Exists(indexKey) {
				// 获取目录信息
				GetChapter(logg, cache, indexId)
			}

			// 从缓存中获取目录信息
			toc, err := cache.GetString(indexKey)
			if err != nil {
				fmt.Printf("获取目录信息失败: %v\n", err)
				return
			}
			info, err := clearTocInfo(toc)
			if err != nil {
				return
			}
			fmt.Print(info)
			os.Exit(0)
		}
		os.Exit(1)
	}

	rawURL := "https://weread.qq.com/book-detail?type=1&senderVid=17094897&v=e223200071c3a8e5e229d2f"
	// 获取Url
	if url != "" {
		rawURL = url
	}

	// 解析bookId
	bookId, err := GetUrlArg(rawURL)
	if err != nil {
		return
	}
	infoKey := bookId + "_info.json"
	if !cache.Exists(infoKey) {
		logg.Infof("运行开始: %s\n", time.Now())
		// 获取书籍信息
		err := GetBookInfo(logg, cache, bookId)
		if err != nil {
			if statusErr, ok := err.(interface{ StatusCode() int }); ok {
				logg.Infof("HTTP错误: %d", statusErr.StatusCode())
			} else {
				logg.Infof("其他错误: %v", err)
			}
		}

		// 获取目录
		tocKey := bookId + "_toc.json"
		if !cache.Exists(tocKey) {
			// 获取目录信息
			GetChapter(logg, cache, bookId)
		}
	}

	if !*tocPtr {
		// 没有toc参数,默认打印书籍信息
		stringInfo, err := cache.GetString(infoKey)
		if err != nil {
			return
		}
		fmt.Print(stringInfo)
	}

	// 打印目录信息
	if *tocPtr {
		tocKey := bookId + "_toc.json"
		if !cache.Exists(tocKey) {
			// 获取目录信息
			GetChapter(logg, cache, bookId)
		}

		stringInfo, err := cache.GetString(tocKey)
		if err != nil {
			return
		}
		fmt.Print(stringInfo)
	}

}
